05-도메인ALB연결
도메인을 ALB로 연결
상황 파악
현재 상태
Week3.5의 01-04단계를 완료하여 ALB가 구축된 상태에서 진행합니다.
현재 접속 방법:
- 기존 도메인:
https://yourdomain.com/webapp/(Web서버 직접 연결) - 새로운 ALB:
http://webapp-alb-xxxxxxx.ap-northeast-2.elb.amazonaws.com/webapp/
목표 상태
- 도메인:
https://yourdomain.com/webapp/(ALB 경유) - SSL 처리: Certificate Manager (ALB에서 종료)
- Apache 설정: HTTPS → HTTP 전용으로 변경
전환 과정 개요
1. Certificate Manager에서 SSL 인증서 발급
2. ALB에 HTTPS 리스너 추가 및 SSL 적용
3. Route 53에서 도메인을 ALB로 변경
4. Apache에서 SSL 설정 제거
5. 동작 확인 및 최적화
1단계: Certificate Manager 인증서 발급
ALB용 SSL 인증서 생성
- Certificate Manager 콘솔 접속 (ap-northeast-2 리전 확인)
- 인증서 요청 클릭
- 퍼블릭 인증서 요청 선택
- 인증서 설정:
- 도메인 이름:
yourdomain.com - 이 인증서에 다른 이름 추가:
www.yourdomain.com
- 도메인 이름:
- 검증 방법: DNS 검증
- 키 알고리즘: RSA 2048
- 요청 클릭
Route 53에서 DNS 검증
- 발급된 인증서 상세 페이지에서 Route 53에서 레코드 생성 클릭
- 레코드 생성 확인
- 자동으로 CNAME 레코드가 추가됨
- 5-10분 대기 후 인증서 상태가 발급됨으로 변경 확인
인증서 발급 확인
# 명령어로 인증서 발급 상태 확인
aws acm list-certificates --region ap-northeast-2
# 특정 인증서 상세 정보 확인
aws acm describe-certificate --certificate-arn arn:aws:acm:ap-northeast-2:xxxxx:certificate/xxxxx --region ap-northeast-2
2단계: ALB에 SSL 인증서 적용
HTTPS 리스너 추가
- EC2 콘솔 → 로드 밸런서 →
webapp-alb선택 - 리스너 및 규칙 탭 클릭
- 리스너 추가 클릭
HTTPS 리스너 설정
리스너 구성:
- 프로토콜: HTTPS
- 포트: 443
- 기본 작업:
- 유형: 대상 그룹으로 전달
- 대상 그룹:
webapp-web-targets
보안 설정:
- 보안 정책: ELBSecurityPolicy-TLS13-1-2-2021-06 (최신 권장)
- 기본 SSL 인증서:
- Certificate Manager에서 발급받은 인증서 선택
yourdomain.com (arn:aws:acm:ap-northeast-2:...)
HTTP → HTTPS 리다이렉트 설정
- 기존 HTTP:80 리스너 선택
- 작업 → 편집 클릭
- 기본 작업 변경:
- 작업 유형: 리디렉션
- 프로토콜: HTTPS
- 포트: 443
- 상태 코드: 301 - 영구적으로 이동됨
- 저장 클릭
ALB 보안 그룹 확인
ALB 보안 그룹에 HTTPS 포트 추가:
- ALB 세부 정보 → 보안 탭
- 연결된 보안 그룹 클릭
- 인바운드 규칙 편집
- 규칙 추가:
- 유형: HTTPS
- 포트 범위: 443
- 소스: 0.0.0.0/0
- 규칙 저장
3단계: Route 53 DNS 변경
기존 A 레코드 백업
00단계를 통해 현재 설정을 기록해두세요:
현재 설정 (웹서버 직접 연결):
- 루트 도메인: A 레코드 → Web서버-Public-IP
- www 서브도메인: A 레코드 → Web서버-Public-IP
- SSL 처리: Apache에서 Let's Encrypt 인증서 사용
대상 변경 사항:
- DNS: Web서버-IP → ALB 별칭 레코드
- SSL: Apache Let's Encrypt → ALB Certificate Manager
ALB 별칭 레코드로 변경
루트 도메인 (공백) 레코드 변경:
- Route 53 → 호스팅 영역 → 본인 도메인
- 기존 A 레코드 (Web서버-IP) 선택 → 삭제
- 레코드 생성 클릭:
- 레코드 이름: (공백)
- 레코드 유형: A - IPv4 주소
- 별칭: 예
- 트래픽 라우팅 대상:
- Application/Classic Load Balancer에 대한 별칭
- 아시아 태평양(서울) ap-northeast-2
- webapp-alb 선택
- 레코드 생성
www 서브도메인 레코드 변경:
- 기존 www A 레코드 삭제
- 레코드 생성:
- 레코드 이름: www
- 나머지 설정은 루트 도메인과 동일
- 레코드 생성
DNS 전파 확인
# DNS 변경 확인
nslookup yourdomain.com
# ALB DNS 이름이 반환되는지 확인
dig yourdomain.com
# 예상 결과: ALB DNS 이름이 CNAME으로 표시
DNS 전파 온라인 확인:
- https://www.whatsmydns.net/
- 전 세계 DNS 서버에서 변경사항 확인
4단계: Apache SSL 설정 제거
ALB에서 SSL을 처리하므로 Apache의 SSL 설정을 제거합니다.
Web 서버 접속
ssh -i webapp-keypair.pem ec2-user@Web서버-Public-IP
Let's Encrypt 인증서 제거
# 현재 인증서 목록 확인
sudo certbot certificates
# 인증서 삭제 (자동으로 Apache 설정도 정리)
sudo certbot delete --cert-name yourdomain.com
# 확인 메시지에서 'Y' 입력
Apache 설정 정리
# SSL 관련 설정 파일 백업
sudo cp /etc/httpd/conf.d/yourdomain.com-le-ssl.conf /etc/httpd/conf.d/yourdomain.com-le-ssl.conf.backup 2>/dev/null || echo "SSL 설정 파일 없음"
# SSL 설정 파일 제거
sudo rm -f /etc/httpd/conf.d/yourdomain.com-le-ssl.conf
# 기본 가상 호스트를 HTTP 전용으로 설정
sudo nano /etc/httpd/conf.d/webapp.conf
Apache 가상 호스트 설정 (HTTP 전용):
<VirtualHost *:80>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
DocumentRoot /var/www/html
# JSP 요청을 Tomcat으로 프록시
ProxyPreserveHost On
ProxyPass /webapp/ http://WAS서버-Private-IP:8080/webapp/
ProxyPassReverse /webapp/ http://WAS서버-Private-IP:8080/webapp/
# 정적 파일 디렉토리 설정
<Directory "/var/www/html">
AllowOverride None
Require all granted
</Directory>
# 로그 설정
ErrorLog logs/yourdomain_access.log
CustomLog logs/yourdomain_access.log combined
</VirtualHost>
Apache 재시작 및 확인
# 설정 문법 확인
sudo httpd -t
# Apache 재시작
sudo systemctl restart httpd
# 상태 확인
sudo systemctl status httpd
# 포트 443 리스닝 중단 확인
sudo netstat -tlnp | grep :443
# 결과: 아무것도 나오지 않아야 함
# 포트 80만 리스닝 확인
sudo netstat -tlnp | grep :80
cron 자동 갱신 작업 제거
# crontab 편집
sudo crontab -e
# Let's Encrypt 갱신 라인 제거 또는 주석 처리
# 0 2 * * * /usr/bin/certbot renew --quiet && /bin/systemctl reload httpd
# cron 작업 확인
sudo crontab -l
5단계: 전체 시스템 동작 확인
HTTPS 접속 테스트
기본 접속 확인:
https://yourdomain.com/webapp/
https://www.yourdomain.com/webapp/
HTTP 리다이렉트 확인:
http://yourdomain.com/webapp/ → https로 자동 전환
http://www.yourdomain.com/webapp/ → https로 자동 전환
SSL 인증서 확인
- 브라우저 주소창 자물쇠 아이콘 클릭
- 인증서 정보 확인:
- 발급자: Amazon (Certificate Manager)
- 주체: yourdomain.com
- 유효기간: 1년 (자동 갱신)
트래픽 흐름 확인
전체 요청 경로:
사용자 → yourdomain.com (Route 53)
→ ALB (HTTPS 종료, Certificate Manager)
→ Web서버 (Apache, HTTP)
→ WAS서버 (Tomcat)
→ RDS
Apache 로그에서 ALB 요청 확인:
# Apache 액세스 로그 실시간 확인
sudo tail -f /var/log/httpd/yourdomain_access.log
# 별도 터미널에서 웹사이트 접속하여 로그 확인
예상 로그 형태:
10.0.1.x - - [09/Sep/2025:15:30:45 +0000] "GET /webapp/ HTTP/1.1" 200 1024
# IP가 ALB의 Private IP로 표시됨
ALB Health Check 확인
- EC2 콘솔 → 대상 그룹 →
webapp-web-targets - 대상 탭에서 상태 확인
- 상태: healthy 표시 확인
- 상태 확인 세부 정보에서 성공적인 응답 확인
6단계: 성능 및 최적화
응답 시간 비교
ALB 경유 응답 시간 측정:
# HTTPS 응답 시간 확인
curl -w "Total: %{time_total}s, SSL: %{time_appconnect}s\n" \
-o /dev/null -s https://yourdomain.com/webapp/
# 여러 번 테스트하여 평균 확인
for i in {1..5}; do
curl -w "Request $i: %{time_total}s\n" -o /dev/null -s https://yourdomain.com/webapp/
done
ALB 로그 활성화 (선택사항)
# AWS CLI로 ALB 액세스 로그 활성화
aws elbv2 modify-load-balancer-attributes \
--load-balancer-arn arn:aws:elasticloadbalancing:ap-northeast-2:xxxxx:loadbalancer/app/webapp-alb/xxxxx \
--attributes Key=access_logs.s3.enabled,Value=true Key=access_logs.s3.bucket,Value=my-alb-logs
완료 체크리스트
Certificate Manager 설정
ALB SSL 구성
DNS 및 Apache 변경
동작 확인
성능 검증
트러블슈팅
DNS 변경이 반영되지 않는 경우
해결 방법:
- TTL 대기: DNS 캐시 TTL 시간(300초) 대기
- DNS 캐시 플러시:
# Windows ipconfig /flushdns # Mac/Linux sudo systemctl flush-dns - 다른 네트워크에서 테스트 (모바일 데이터 등)
ALB 접속 불가
점검 순서:
- ALB 상태: 활성 상태 확인
- 대상 그룹: healthy 상태 확인
- 보안 그룹: 포트 443 허용 확인
- 인증서: 발급 완료 상태 확인
Apache 500 에러
로그 확인:
# Apache 에러 로그 확인
sudo tail -f /var/log/httpd/error_log
# 가상 호스트 에러 로그 확인
sudo tail -f /var/log/httpd/yourdomain_error.log
일반적인 해결책:
- Apache 설정 문법 오류 수정
- 프록시 대상 WAS 서버 상태 확인
- SELinux 정책 확인
이점 및 개선사항
Certificate Manager 사용 이점
관리 편의성:
- AWS에서 완전 자동 갱신 (1년 주기)
- 수동 cron 작업 불필요
- 인증서 배포 자동화
확장성:
- ALB 스케일링 시 SSL 설정 자동 적용
- Multi-AZ 환경에서 동일한 인증서 사용
- Auto Scaling 인스턴스에 SSL 설정 불필요
보안 강화:
- 최신 TLS 프로토콜 자동 지원
- 인증서 프라이빗 키를 AWS에서 보안 관리
- 정기적인 보안 업데이트 자동 적용
아키텍처 개선
이전 구조 (Week3 + 00단계):
사용자 → Route 53 → Apache (SSL 종료) → Tomcat → RDS
현재 구조 (Week3.5 + 도메인 연결):
사용자 → Route 53 → ALB (SSL 종료) → Apache → Tomcat → RDS
개선된 점:
- SSL 처리 부하를 ALB로 분산
- Apache 서버 교체 시 SSL 재설정 불필요
- 고가용성 및 Auto Scaling 준비 완료
도메인 ALB 연결 완료
축하합니다! 도메인이 성공적으로 ALB를 통해 고가용성 아키텍처에 연결되었습니다. 이제 AWS 관리형 SSL 인증서를 사용하여 더 안정적이고 확장 가능한 HTTPS 웹 서비스를 제공할 수 있습니다.
다음 단계: AWS EDU/Archive/조선대학교 AWS 멘토링/Week3.5-HA-Scalable-WebService/03-Auto-Scaling-Group/01-Auto-Scaling개념에서 자동 확장 기능을 추가하여 트래픽 증가에 자동으로 대응하는 시스템을 구축합니다.
관련 문서: AWS EDU/Archive/조선대학교 AWS 멘토링/Week3.5-HA-Scalable-WebService/02-Application-Load-Balancer/04-Health-Check설정, AWS EDU/Archive/조선대학교 AWS 멘토링/Week3.5-HA-Scalable-WebService/03-Auto-Scaling-Group/01-Auto-Scaling개념